/*
*
==============================================================================
*  Name        : 
*  Part of     : Omen Game Engine - OpenGL Plugin
*  Description : 
*  Version     : 1.0
*
*  Copyright (c) 2013 Lauri Kortevaara.
* 
==============================================================================
*/

#pragma once

#include <OmenSingleton.h>

#include <Windows.h>
#include <string>
#include <vector>
#include <iostream>

struct VideoMode {
        std::wstring deviceName;
        DWORD bitsPerPixel;
        unsigned int  width;
        unsigned int  height;
        DWORD displayFrequency;
    };

class SystemInfo : public Singleton<SystemInfo>
{
    friend class Singleton<SystemInfo>;
    friend class std::unique_ptr<SystemInfo>;

public:
    SystemInfo(void);
    ~SystemInfo(void);

    static void getDisplayCardInfo();
    static bool getOpenGLExtensions();
    static void getSupportedDisplayModes();

    static bool GetGPUMemoryInfo_Nvidia( int& i_mem_total, int& i_mem_available );
    static void GetGPUMemoryInfo_AtiAmd();

protected:
    
    typedef std::vector< std::wstring > OpenGLExtensionVector;
    static OpenGLExtensionVector gl_extensions; // OpenGL Extensions

 
private:
    static std::vector<VideoMode> supportedVideoModes;
};

